This file is also included in the header of any cecil file (when the
-cecil option is used).
This file is also included in the header file of C++ wrappers (when
using the external "C++" clause).
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <signal.h>
#include <stddef.h>
#include <stdarg.h>
#include <limits.h>
#include <float.h>
#include <setjmp.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#ifdef WIN32
#include <windows.h>
#else
#ifndef O_RDONLY
#include <sys/file.h>
#endif
#ifndef O_RDONLY
#define O_RDONLY 0000
#endif
#endif
/*
On Linux glibc systems, we need to use sig.* versions of jmp_buf,
setjmp and longjmp to preserve the signal handling context.
Currently, the way I figured to detect this is if _SIGSET_H_types has
been defined in /usr/include/setjmp.h.
*/
#ifdef _SIGSET_H_types
#define JMP_BUF sigjmp_buf
#define SETJMP(x) sigsetjmp( (x), 1)
#define LONGJMP siglongjmp
#else
#define JMP_BUF jmp_buf
#define SETJMP(x) setjmp( (x) )
#define LONGJMP longjmp
#endif
/*
Type to store reference objects Id :
*/
typedef int Tid;
typedef struct S0 T0;
struct S0{
Tid id;
};
/*
The default channel used to print runtime error messages :
*/
#define SE_ERR stderr
/*
Eiffel type INTEGER is #2 :
*/
typedef int T2;
#define EIF_INTEGER T2
#define M2 (0)
#define EIF_INTEGER_BITS (CHAR_BIT*sizeof(int))
#define EIF_MINIMUM_INTEGER (INT_MIN)
#define EIF_MAXIMUM_INTEGER (INT_MAX)
/*
Eiffel type CHARACTER is #3 :
*/
typedef unsigned char T3;
#define EIF_CHARACTER T3
#define M3 (0)
#define EIF_CHARACTER_BITS (CHAR_BIT)
#define EIF_MINIMUM_CHARACTER_CODE (0)
#define EIF_MAXIMUM_CHARACTER_CODE (255)
#define T3code(x) ((T2)(x))
#define T3to_integer(x) ((T2)((char)(x)))
#define T3to_bit(x) (x)
/*
Eiffel type REAL is #4 :
*/
typedef float T4;
#define EIF_REAL T4
#define M4 (0.0)
#define EIF_REAL_BITS (CHAR_BIT*sizeof(float))
#define EIF_MINIMUM_REAL (-(FLT_MAX))
#define EIF_MAXIMUM_REAL (FLT_MAX)
#define T2toT4(x) ((T4)(x))
/*
Eiffel type DOUBLE is #5 :
*/
typedef double T5;
#define EIF_DOUBLE T5
#define M5 (0.0)
#define EIF_DOUBLE_BITS (CHAR_BIT*sizeof(double))
#define EIF_MINIMUM_DOUBLE (-(DBL_MAX))
#define EIF_MAXIMUM_DOUBLE (DBL_MAX)
#define T2toT5(x) ((T5)(x))
#define T4toT5(x) ((T5)(x))
/*
Eiffel type BOOLEAN is #6 :
*/
typedef char T6;
#define EIF_BOOLEAN T6
#define M6 (0)
#define EIF_BOOLEAN_BITS (CHAR_BIT)
/*
Eiffel type POINTER is #8 :
*/
typedef void* T8;
#define EIF_POINTER T8
#define M8 (NULL)
#define EIF_POINTER_BITS (CHAR_BIT*sizeof(void*))
/*
To use type STRING on the C side :
*/
#define EIF_STRING T7*
/*
Some Other EIF_* defined in ETL :
*/
#define eif_access(x) ((char*)(x))
#define EIF_REFERENCE T0*
#define EIF_OBJ T0*
#define EIF_OBJECT EIF_OBJ
/* --- Mangling Table Start ---
A 1 T134 R CALL_PREFIX_NOT 134
D 2 T144 R ABSTRACT_RESULT 145,146
A 1 T146 R ORDINARY_RESULT 146
D 8 T213 R ROUTINE 307,306,304,303,291,290,287,285
A*1 T279 R ARRAY[FORMAL_GENERIC_ARG] 279
A 1 T217 R E_CHECK 217
A 2 T379 R ARRAY[RUN_FEATURE] 379,346
A*1 T318 R ARRAY[EXPORT_ITEM] 318
A*1 T309 R ARRAY[DECLARATION] 309
A 1 T176 R ARRAY[LOCAL_NAME1] 176
A*1 T88 R ARRAY[RENAME_PAIR] 88
A 1 T133 R PREFIX_NAME 133
A 1 T272 R TYPE_CLASS 272
A 1 T187 R CALL_INFIX_EQ 187
A 1 T350 E NATIVE_ARRAY[RUN_FEATURE] 350
A 1 T320 E NATIVE_ARRAY[EXPORT_ITEM] 320
A 1 T310 E NATIVE_ARRAY[DECLARATION] 310
A 1 T223 E NATIVE_ARRAY[INSTRUCTION] 223
A 1 T177 E NATIVE_ARRAY[LOCAL_NAME1] 177
A 1 T89 E NATIVE_ARRAY[RENAME_PAIR] 89
A 1 T120 R CALL_INFIX_AND 120
A*1 T36 R STD_OUTPUT 36
A 1 T261 E NATIVE_ARRAY[TYPE] 261
D T30 R BOOLEAN_REF
A 1 T6 E BOOLEAN 6
D 20 T113 R CALL_INFIX 111,117,118,119,120,121,193,192,191,190,189,187,122,123,124,125,126,127,186,128
D T19 R INTEGER_REF
A*1 T96 R FEATURE_CLAUSE 96
A 1 T118 R CALL_INFIX_OR 118
A*1 T76 R PARSER_BUFFER 76
A 1 T355 E NATIVE_ARRAY[DICTIONARY[RUN_FEATURE,STRING]] 355
A 1 T394 R PRECURSOR_NAME 394
A 1 T148 R WRITTEN_CURRENT 148
A 1 T314 R DECLARATION_1 314
A 1 T2 E INTEGER 2
D T38 R POINTER_REF
A 1 T306 R ONCE_PROCEDURE 306
A 1 T197 E TMP_FEATURE 197
A*1 T94 R FORMAL_GENERIC_LIST 94
A*1 T95 R FEATURE_CLAUSE_LIST 95
A*1 T66 R ERROR_HANDLER 66
A*1 T81 R COMMENT 81
D 11 T334 R RUN_FEATURE 398,345,395,397,396,333,337,386,388,392,368
A 1 T211 R CST_ATT_DOUBLE 211
A 1 T198 R CST_ATT_UNIQUE 198
A*1 T203 R COUNTER 203
A 1 T8 E POINTER 8
A 1 T256 R TYPE_LIKE_CURRENT 256
A 1 T266 R TYPE_DOUBLE 266
A 1 T137 R E_STRIP 137
A 1 T393 R IMPLICIT_CAST 393
A 1 T193 R CALL_INFIX_GT 193
A 1 T192 R CALL_INFIX_LT 192
A*1 T48 R STD_FILE_WRITE 48
A*1 T376 R RUN_REQUIRE 376
D 8 T199 R CST_ATT 212,205,204,210,209,206,198,211
A 1 T260 R TYPE_ARRAY 260
A 1 T293 R NATIVE_WITH_CURRENT 293
A 1 T164 R REAL_CONSTANT 164
A*1 T366 R MANIFEST_STRING_POOL 366
A*1 T362 R DICTIONARY[TYPE,INTEGER] 362
A 1 T271 R TYPE_STRING 271
D 2 T308 R DECLARATION 314,311
A 4 T349 R FIXED_ARRAY[RUN_FEATURE] 391,385,372,349
A*1 T216 R FIXED_ARRAY[INSTRUCTION] 216
A 1 T206 R CST_ATT_STRING 206
A 1 T230 R E_RETRY 230
A 1 T125 R CALL_INFIX_INT_REM 125
D 27 T115 R CALL 123,136,143,128,121,119,190,191,126,124,111,117,189,122,127,135,186,130,140,142,125,192,193,118,120,187,134
A*1 T35 R ECHO 35
A 1 T4 E REAL 4
A 1 T142 R CALL_1_C 142
A 1 T140 R CALL_0_C 140
D 4 T302 R EFFECTIVE_ROUTINE 307,303,304,306
A*1 T215 R COMPOUND 215
D 22 T52 R TYPE 390,389,280,277,275,274,273,272,271,270,269,268,267,266,265,263,262,260,259,257,256,254
A 1 T298 R NATIVE_JVM_INVOKESTATIC 298
A 1 T388 R RUN_FEATURE_1 388
A*1 T47 R RUN_CONTROL 47
A 1 T280 R TYPE_FORMAL_GENERIC 280
A 1 T371 E NATIVE_ARRAY[ADDRESS_OF] 371
A 1 T196 E NATIVE_ARRAY[CLASS_NAME] 196
A 1 T110 E NATIVE_ARRAY[EXPRESSION] 110
A 1 T65 E NATIVE_ARRAY[BASE_CLASS] 65
A*1 T317 R EXPORT_ITEM 317
A*1 T105 R TAG_NAME 105
A*1 T214 R E_ENSURE 214
D T329 R REAL_REF
A 1 T345 R RUN_FEATURE_2 345
D 17 T151 R INSTRUCTION 283,282,253,251,249,246,243,231,230,221,224,219,217,154,153,168,155
A 1 T73 E BIT 7 73
A*1 T27 R FIXED_ARRAY[INTEGER] 27
A*1 T353 R DICTIONARY[DICTIONARY[RUN_FEATURE,STRING],STRING] 353
A 1 T138 R SIMPLE_FEATURE_NAME 138
A 1 T155 R PROC_CALL_N 155
A 1 T107 E TMP_NAME 107
A 1 T316 R FROZEN_FEATURE_NAME 316
A 1 T368 R RUN_FEATURE_3 368
A*1 T87 R RENAME_PAIR 87
D 30 T116 R CALL_PROC_CALL 123,136,143,128,121,119,190,191,154,153,126,124,111,117,189,122,127,135,186,130,155,140,142,125,192,193,118,120,187,134
A 1 T396 R RUN_FEATURE_4 396
A 1 T346 R ARRAY[RUN_FEATURE_2] 346
A 1 T168 R E_PRECURSOR_PROCEDURE 168
A*1 T99 R CLIENT_LIST 99
A*1 T11 R COMPILE_TO_C 11
A 1 T235 E NATIVE_ARRAY[E_WHEN] 235
A 1 T228 E NATIVE_ARRAY[IFTHEN] 228
A 1 T60 E NATIVE_ARRAY[PARENT] 60
A 1 T32 E NATIVE_ARRAY[STRING] 32
A 1 T304 R FUNCTION 304
A 1 T185 R E_OLD 185
A*1 T85 R RENAME_LIST 85
A 1 T297 R NATIVE_INLINE_WITHOUT_CURRENT 297
D 2 T167 R E_PRECURSOR 166,168
A*1 T57 R PARENT_LIST 57
A 1 T397 R RUN_FEATURE_5 397
A*1 T39 R ID_PROVIDER 39
A 1 T130 R CALL_PREFIX_FREEOP 130
A 1 T68 E POSITION 68
A 1 T262 R TYPE_NATIVE_ARRAY 262
D 5 T82 R FEATURE_NAME 394,316,138,129,133
A 1 T145 R ONCE_RESULT 145
A*1 T321 R INDEX_CLAUSE 321
A 1 T395 R RUN_FEATURE_6 395
A 1 T209 R CST_ATT_BIT 209
A 1 T166 R E_PRECURSOR_FUNCTION 166
A*1 T319 R EXPORT_LIST 319
A*1 T234 R ARRAY[E_WHEN] 234
A*1 T227 R ARRAY[IFTHEN] 227
A*1 T59 R ARRAY[PARENT] 59
A 1 T44 R ARRAY[STRING] 44
A*1 T342 R DICTIONARY[TYPE,STRING] 342
D 2 T305 R ONCE_ROUTINE 307,306
A 1 T337 R RUN_FEATURE_7 337
A 1 T273 R TYPE_GENERIC 273
A 1 T370 R FIXED_ARRAY[ADDRESS_OF] 370
A*1 T195 R FIXED_ARRAY[CLASS_NAME] 195
A 5 T141 R FIXED_ARRAY[EXPRESSION] 339,370,207,201,141
A*1 T64 R FIXED_ARRAY[BASE_CLASS] 64
A*1 T343 R FIXED_ARRAY[TYPE] 343
D 2 T170 R DECLARATION_LIST 178,169
A 1 T254 R TYPE_LIKE_FEATURE 254
A*1 T358 R FIXED_ARRAY[EFFECTIVE_ARG_LIST] 358
A*1 T331 R FIXED_ARRAY[NATIVE_C_PLUS_PLUS] 331
A 1 T186 R CALL_INFIX_POWER 186
A*1 T348 R DICTIONARY[RUN_FEATURE,STRING] 348
A 1 T333 R RUN_FEATURE_8 333
A*1 T380 R EXCEPTIONS_HANDLER 380
D 2 T276 R TYPE_BIT 277,275
A*1 T78 R CREATION_CLAUSE 78
A 1 T181 R ARGUMENT_NAME1 181
A 4 T108 R ARRAY[EXPRESSION] 182,176,220,108
A*1 T341 R CONVERSION_HANDLER 341
A 1 T386 R RUN_FEATURE_9 386
A 1 T224 R INSTRUCTION_WITH_COMMENT 224
A*1 T325 R C_PRETTY_PRINTER 325
A 2 T139 R EFFECTIVE_ARG_LIST 381,139
A 1 T135 R CALL_PREFIX_PLUS 135
A 1 T127 R CALL_INFIX_TIMES 127
A 1 T122 R CALL_INFIX_MINUS 122
A 1 T189 R CALL_INFIX_NEQ 189
D 17 T90 R E_FEATURE 315,307,306,304,303,291,290,287,285,212,211,210,209,206,205,204,198
A 1 T378 E NATIVE_ARRAY[E_REQUIRE] 378
A 1 T238 E NATIVE_ARRAY[WHEN_ITEM] 238
A 1 T106 E NATIVE_ARRAY[ASSERTION] 106
A 1 T93 E NATIVE_ARRAY[E_FEATURE] 93
A 1 T54 E NATIVE_ARRAY[RUN_CLASS] 54
A 1 T9 E NATIVE_ARRAY[CHARACTER] 9
A 2 T384 R DICTIONARY[EXPRESSION,STRING] 384,367
A*1 T63 R DICTIONARY[BASE_CLASS,STRING] 63
A 1 T390 R TYPE_BIT_REF 390
A 1 T160 R CHARACTER_CONSTANT 160
D 2 T156 R BOOLEAN_CONSTANT 159,158
A 1 T179 R ARGUMENT_NAME2 179
A 1 T303 R PROCEDURE 303
A 1 T392 R RUN_FEATURE_10 392
A 1 T335 R FIXED_ARRAY[EXTERNAL_ROUTINE] 335
A 1 T201 R FIXED_ARRAY[INTEGER_CONSTANT] 201
A 1 T259 R TYPE_ANY 259
A 1 T275 R TYPE_BIT_1 275
A 1 T165 R INTEGER_CONSTANT 165
A 1 T117 R CALL_INFIX_XOR 117
A 1 T381 R CECIL_ARG_LIST 381
A 1 T161 R MANIFEST_STRING 161
A 1 T184 R IMPLICIT_CURRENT 184
A 1 T111 R CALL_INFIX_IMPLIES 111
A*1 T286 R E_REQUIRE 286
A 1 T277 R TYPE_BIT_2 277
A 1 T245 R LOOP_VARIANT_1 245
A 1 T398 R RUN_FEATURE_11 398
A 1 T169 R LOCAL_VAR_LIST 169
A 1 T336 E NATIVE_ARRAY[EXTERNAL_ROUTINE] 336
A 1 T301 R NATIVE_C_PLUS_PLUS 301
A 1 T202 E NATIVE_ARRAY[INTEGER_CONSTANT] 202
A 1 T359 E NATIVE_ARRAY[EFFECTIVE_ARG_LIST] 359
A 1 T332 E NATIVE_ARRAY[NATIVE_C_PLUS_PLUS] 332
A 1 T281 E NATIVE_ARRAY[FORMAL_GENERIC_ARG] 281
A*1 T258 R ARRAY[TYPE] 258
A*1 T49 R SMALL_EIFFEL 49
A 1 T367 R DICTIONARY[MANIFEST_STRING,STRING] 367
A 1 T268 R TYPE_NONE 268
A 1 T244 R LOOP_VARIANT_2 244
A*1 T21 R STRING_ALIASER 21
A*1 T91 R DICTIONARY[E_FEATURE,STRING] 91
A*1 T55 R DICTIONARY[RUN_CLASS,STRING] 55
A*1 T400 R MEMO[E_OLD] 400
A 1 T207 R FIXED_ARRAY[MANIFEST_STRING] 207
A 1 T210 R CST_ATT_REAL 210
A 1 T313 E NATIVE_ARRAY[LOCAL_ARGUMENT1] 313
A 1 T208 E NATIVE_ARRAY[MANIFEST_STRING] 208
A 1 T80 E NATIVE_ARRAY[CREATION_CLAUSE] 80
A*1 T354 R FIXED_ARRAY[DICTIONARY[RUN_FEATURE,STRING]] 354
A 1 T265 R TYPE_CHARACTER 265
A 1 T283 R REVERSE_ASSIGNMENT 283
A*1 T100 R ASSERTION 100
A*1 T361 R MANIFEST_ARRAY_POOL 361
A 1 T70 E BIT 32 70
D 3 T152 R PROC_CALL 154,153,155
A 1 T3 E CHARACTER 3
A 1 T75 E BIT 13 75
A*1 T360 R FIXED_ARRAY[PARENT] 360
A 1 T31 R FIXED_ARRAY[STRING] 31
D 2 T236 R WHEN_ITEM 240,239
A 1 T124 R CALL_INFIX_DIV 124
A 1 T74 E BIT 15 74
A*1 T242 R LOOP_INVARIANT 242
A 1 T270 R TYPE_REAL 270
A 1 T174 R LOCAL_NAME1 174
A 1 T357 E NATIVE_ARRAY[CALL_PROC_CALL] 357
A 1 T183 E NATIVE_ARRAY[ARGUMENT_NAME1] 183
A 1 T98 E NATIVE_ARRAY[FEATURE_CLAUSE] 98
A 1 T300 R NATIVE_JVM_INVOKEVIRTUAL 300
A 1 T171 R LOCAL_NAME2 171
A*1 T369 R ADDRESS_OF_POOL 369
A 1 T263 R TYPE_BOOLEAN 263
A 3 T92 R FIXED_ARRAY[E_FEATURE] 364,335,92
A*1 T56 R FIXED_ARRAY[RUN_CLASS] 56
A 1 T126 R CALL_INFIX_INT_DIV 126
A*1 T363 R ONCE_ROUTINE_POOL 363
A*1 T323 R ARRAY[INDEX_CLAUSE] 323
D 5 T132 R CALL_0 136,135,130,140,134
A 1 T257 R TYPE_LIKE_ARGUMENT 257
A*1 T356 R FIXED_ARRAY[CALL_PROC_CALL] 356
A 1 T382 R CECIL_TARGET 382
A 1 T292 R NATIVE_SMALL_EIFFEL 292
A 1 T287 R DEFERRED_FUNCTION 287
D 2 T188 R CALL_INFIX2 189,187
A*1 T77 R CREATION_CLAUSE_LIST 77
A*1 T46 R STD_ERROR 46
A 1 T109 R MANIFEST_ARRAY 109
A 1 T153 R PROC_CALL_0 153
D T33 R CHARACTER_REF
D 2 T175 R LOCAL_ARGUMENT1 181,174
A 1 T239 R WHEN_ITEM_1 239
A 1 T229 R EXPRESSION_WITH_COMMENT 229
A 1 T154 R PROC_CALL_1 154
A 1 T285 R DEFERRED_PROCEDURE 285
A 1 T246 R CREATION_CALL_1 246
A 1 T231 R E_INSPECT 231
A*1 T50 R RUN_CLASS 50
A*1 T233 R WHEN_LIST 233
D 2 T312 R ARRAY[LOCAL_ARGUMENT1] 182,176
A 1 T220 R ARRAY[MANIFEST_STRING] 220
A*1 T79 R ARRAY[CREATION_CLAUSE] 79
A 1 T191 R CALL_INFIX_GE 191
A 1 T190 R CALL_INFIX_LE 190
A 1 T240 R WHEN_ITEM_2 240
A 1 T69 E NATIVE_ARRAY[POSITION] 69
A 1 T150 R ADDRESS_OF 150
A*1 T40 R STD_FILE_READ 40
A 1 T311 R DECLARATION_GROUP 311
A 1 T163 R BIT_CONSTANT 163
A 1 T221 R IFTHENELSE 221
A 1 T249 R CREATION_CALL_2 249
A 1 T387 E NATIVE_ARRAY[RUN_FEATURE_9] 387
A 1 T373 E NATIVE_ARRAY[RUN_FEATURE_3] 373
A 1 T365 E NATIVE_ARRAY[ONCE_FUNCTION] 365
A 1 T347 E NATIVE_ARRAY[RUN_FEATURE_2] 347
A*1 T61 R CLASS_NAME 61
A 1 T269 R TYPE_POINTER 269
A 1 T267 R TYPE_INTEGER 267
A*1 T43 R SYSTEM_TOOLS 43
A 1 T129 R INFIX_NAME 129
D T327 R DOUBLE_REF
A 1 T119 R CALL_INFIX_OR_ELSE 119
A 1 T274 R TYPE_EXPANDED 274
A 1 T291 R EXTERNAL_FUNCTION 291
A 1 T121 R CALL_INFIX_AND_THEN 121
A 1 T351 E SWITCH_COLLECTION 351
A 1 T251 R CREATION_CALL_3 251
D 2 T241 R LOOP_VARIANT 245,244
A 1 T5 E DOUBLE 5
A*1 T42 R DICTIONARY[INTEGER,STRING] 42
D 8 T288 R NATIVE 301,300,298,297,296,295,293,292
A 1 T315 R WRITABLE_ATTRIBUTE 315
A 1 T290 R EXTERNAL_PROCEDURE 290
A 1 T391 R FIXED_ARRAY[RUN_FEATURE_2] 391
A 1 T385 R FIXED_ARRAY[RUN_FEATURE_9] 385
A 1 T372 R FIXED_ARRAY[RUN_FEATURE_3] 372
A 1 T364 R FIXED_ARRAY[ONCE_FUNCTION] 364
A 1 T147 R E_VOID 147
A 1 T253 R CREATION_CALL_4 253
A 1 T352 E SWITCH 352
A*1 T7 R STRING 7
D 2 T284 R DEFERRED_ROUTINE 285,287
A 1 T158 R E_TRUE 158
A*1 T338 R CECIL_POOL 338
A 1 T128 R CALL_INFIX_FREEOP 128
A*1 T225 R IFTHEN 225
A 1 T204 R CST_ATT_BOOLEAN 204
A 1 T143 R CALL_N 143
A*1 T278 R FORMAL_GENERIC_ARG 278
A*1 T374 R ARRAY[BOOLEAN] 374
A*1 T162 R ARRAY[INTEGER] 162
A*1 T232 R E_WHEN 232
A 1 T243 R E_LOOP 243
A*1 T58 R PARENT 58
A 1 T340 E NATIVE_ARRAY[BIT_CONSTANT] 340
A 1 T324 E NATIVE_ARRAY[INDEX_CLAUSE] 324
A 1 T86 E NATIVE_ARRAY[FEATURE_NAME] 86
A*1 T377 R ARRAY[E_REQUIRE] 377
A*1 T237 R ARRAY[WHEN_ITEM] 237
A*1 T101 R ARRAY[ASSERTION] 101
A*1 T53 R ARRAY[RUN_CLASS] 53
A 1 T295 R NATIVE_INLINE_WITH_CURRENT 295
D 2 T289 R EXTERNAL_ROUTINE 290,291
D 52 T104 R EXPRESSION 393,382,181,174,229,111,117,118,119,120,121,193,192,191,190,189,187,122,123,124,125,126,127,186,128,185,184,179,171,166,165,164,163,161,160,159,158,150,148,147,146,145,143,142,140,138,137,130,136,135,134,109